package org.jeecg.modules.system.service;

import java.util.List;
import java.util.Map;

import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.system.entity.BaseEntity;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.entity.SysPermission;
import org.jeecg.modules.system.entity.SysUserRole;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.system.vo.SysUserRoleScope;

/**
 * <p>
 * 用户角色表 服务类
 * </p>
 *
 * @Author scott
 * @since 2018-12-21
 */
public interface ISysUserRoleService extends IService<SysUserRole> {
	
	/**
	 * 查询所有的用户角色信息
	 * @return
	 */
	Map<String,String> queryUserRole();

	List<SysUserRole> selectByMainId(String mainId);
	List<SysUserRole> selectServerByMainId(String mainId,String tenantId);

	void addUserRoleScope(SysUserRoleScope sysUserRoleScope);

	void editUserRoleScope(SysUserRoleScope sysUserRoleScope);

	void insertBatchHis(List<SysUserRole> list);


	/**
	 * 获取当前用户拥有的小区id列表 - 根据菜单路径 - liurui
	 * @param baseEntity
	 * @return
	 *
	 */
	public List<String> queryProjectIds(BaseEntity baseEntity);


    List<String> queryCompanyIds(BaseEntity baseEntity);

    /**
	 * 获取当前用户拥有的管理处列表 - 根据菜单路径 - liurui
	 * @param baseEntity
	 * @return
	 */
	public List<String> queryOfficeIds(BaseEntity baseEntity);


	List<String> queryDepartIds(BaseEntity baseEntity);

	/**
	 * 根据菜单路径 和 登录用户 查询对应的组织机构 (公司 + 管理处 + 部门) - liurui
	 * @param menuPath
	 * @param userId
	 * @param departProperty  机构类型   c - 公司  o - 管理处  d - 部门
	 *              <p>c+o : 公司 + 管理处 不包括部门</p>
	 *              <p>c+d ：公司 + 部门   不包括管理处</p>
	 *              <p>d : 只查询部门 </p>
	 *              <p>为空: 查询所有</p>
	 * @return
	 */
	List<SysDepart> queryDepartTreeList(String menuPath, String userId,String departProperty);


	List<SysDepart> queryDepartTreeListByKeywords(String keyword,String menuPath, String id, String departProperty);

	/**
	 *
	 * @param departIdList   机构部门id列表
	 * @return
	 */
	public List<SysDepart> queryProjectTreeListByDepartId(List<String> departIdList);

	/**
	 * 获取用户拥有的菜单
	 * @param userId 用户id
	 * @return
	 */
	List<SysPermission> queryUserPermission(String userId,String tenantId,String client);


    /**
     * 数据范围过滤 - 仅取得机构
     *    departAlias 为空 -  返回机构id字符串  (a123,b123,c123)
     *    departAlias 不为空  - 返回sql拼接串   (d.id in ('a123','b123','c123'))
     * @param user 当前用户对象，通过“SsoUtil.getLoginUser”获取
     * @param departAlias 机构表别名，多个用“,”逗号隔开。
     * @param menuPath 菜单路径
	 * @param departIdEx 树形图中选中的部门等
     * @return 标准连接条件对象
     */
	public String dataScopeDepartOnlyFilter(LoginUser user,String departAlias,String menuPath,String userAlias,String departIdEx);


	/**
	 * 数据范围过滤 - 仅取得项目小区
	 *    projectAlias 为空 -  返回项目id字符串  (a123,b123,c123)
	 *    projectAlias 不为空  - 返回sql拼接串   (d.id in ('a123','b123','c123'))
	 * @param user 当前用户对象，通过“SsoUtil.getLoginUser”获取
	 * @param projectAlias 项目表别名，多个用“,”逗号隔开。
	 * @param menuPath 菜单路径
	 * @return 标准连接条件对象
	 */
    String dataScopeProjectOnlyFilter(LoginUser user, String projectAlias, String menuPath,String userAlias,String departIdEx);




	List<SysUserRole> queryServerByUserId(String tenantId, String userId);

	void editServerUserRoleScope(SysUserRoleScope sysUserRoleScope);

    void serverSave(SysUserRole sysUserRole);
}
